package com.h2cloud.T.type;

import org.junit.Test;

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
 * @Package: com.h2cloud.T.type
 * @ClassName: ParameterizedTypeTest
 * @Author: h2cloud
 * @CreateTime: 2023/11/5 10:52 下午
 * @Description:
 */
public class ParameterizedTypeTest<T> {
	List<Set> a1;           // 返回 Set，Class 类型
	List<Set<String>> a2;   // 返回 Set<String>，ParameterizedType 类型
	List<T> a3;             // 返回 T，TypeVariable 类型
	List<? extends Set> a4; // 返回 WildcardType 类型
	List<Set<String>[]> a5; // 返回 GenericArrayType 类型

	@Test
	public void test1() throws Exception {
		Method method = getClass().getMethod("test", List.class);
		Type[] types = method.getGenericParameterTypes();
		ParameterizedType pType = (ParameterizedType) types[0];
		Type[] type = pType.getActualTypeArguments();
		// sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl
		System.out.println(type[0].getClass().getName());
	}

	public void test(List<ArrayList<String>[]> a) {
	}
}

